From 9b54f124e5a0368d34954d24206e09edbb9eef14 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 24 Mar 2019 16:24:30 -0400 Subject: [PATCH] surface: Simplify destroy implementation Without child surfaces, there is no need to recurse. --- gdk/broadway/gdksurface-broadway.c | 1 - gdk/gdksurface.c | 56 +++++++++++------------------- gdk/gdksurfaceimpl.h | 6 ---- gdk/wayland/gdksurface-wayland.c | 1 - gdk/x11/gdksurface-x11.c | 5 ++- 5 files changed, 23 insertions(+), 46 deletions(-) diff --git a/gdk/broadway/gdksurface-broadway.c b/gdk/broadway/gdksurface-broadway.c index 0a1f45567d..299c3bff1b 100644 --- a/gdk/broadway/gdksurface-broadway.c +++ b/gdk/broadway/gdksurface-broadway.c @@ -258,7 +258,6 @@ gdk_surface_broadway_ref_cairo_surface (GdkSurface *surface) static void _gdk_broadway_surface_destroy (GdkSurface *surface, - gboolean recursing, gboolean foreign_destroy) { GdkSurfaceImplBroadway *impl; diff --git a/gdk/gdksurface.c b/gdk/gdksurface.c index bdec1c608c..9d9a353e07 100644 --- a/gdk/gdksurface.c +++ b/gdk/gdksurface.c @@ -636,8 +636,6 @@ surface_remove_from_pointer_info (GdkSurface *surface, /** * _gdk_surface_destroy_hierarchy: * @surface: a #GdkSurface - * @recursing: If %TRUE, then this is being called because a parent - * was destroyed. * @recursing_native: If %TRUE, then this is being called because a native parent * was destroyed. This generally means that the call to the * windowing system to destroy the surface can be omitted, since @@ -653,8 +651,6 @@ surface_remove_from_pointer_info (GdkSurface *surface, **/ static void _gdk_surface_destroy_hierarchy (GdkSurface *surface, - gboolean recursing, - gboolean recursing_native, gboolean foreign_destroy) { GdkSurfaceImplClass *impl_class; @@ -667,42 +663,32 @@ _gdk_surface_destroy_hierarchy (GdkSurface *surface, display = gdk_surface_get_display (surface); - switch (surface->surface_type) + if (surface->gl_paint_context) { - default: - g_assert_not_reached (); - break; - - case GDK_SURFACE_TOPLEVEL: - case GDK_SURFACE_TEMP: - if (surface->gl_paint_context) - { - /* Make sure to destroy if current */ - g_object_run_dispose (G_OBJECT (surface->gl_paint_context)); - g_object_unref (surface->gl_paint_context); - surface->gl_paint_context = NULL; - } + /* Make sure to destroy if current */ + g_object_run_dispose (G_OBJECT (surface->gl_paint_context)); + g_object_unref (surface->gl_paint_context); + surface->gl_paint_context = NULL; + } - if (surface->frame_clock) - { - g_object_run_dispose (G_OBJECT (surface->frame_clock)); - gdk_surface_set_frame_clock (surface, NULL); - } + if (surface->frame_clock) + { + g_object_run_dispose (G_OBJECT (surface->frame_clock)); + gdk_surface_set_frame_clock (surface, NULL); + } - _gdk_surface_clear_update_area (surface); + _gdk_surface_clear_update_area (surface); - impl_class = GDK_SURFACE_IMPL_GET_CLASS (surface->impl); - impl_class->destroy (surface, recursing_native, foreign_destroy); + impl_class = GDK_SURFACE_IMPL_GET_CLASS (surface->impl); + impl_class->destroy (surface, foreign_destroy); - surface->state |= GDK_SURFACE_STATE_WITHDRAWN; - surface->destroyed = TRUE; + surface->state |= GDK_SURFACE_STATE_WITHDRAWN; + surface->destroyed = TRUE; - surface_remove_from_pointer_info (surface, display); + surface_remove_from_pointer_info (surface, display); - g_object_notify_by_pspec (G_OBJECT (surface), properties[PROP_STATE]); - g_object_notify_by_pspec (G_OBJECT (surface), properties[PROP_MAPPED]); - break; - } + g_object_notify_by_pspec (G_OBJECT (surface), properties[PROP_STATE]); + g_object_notify_by_pspec (G_OBJECT (surface), properties[PROP_MAPPED]); } /** @@ -720,7 +706,7 @@ void _gdk_surface_destroy (GdkSurface *surface, gboolean foreign_destroy) { - _gdk_surface_destroy_hierarchy (surface, FALSE, FALSE, foreign_destroy); + _gdk_surface_destroy_hierarchy (surface, foreign_destroy); } /** @@ -738,7 +724,7 @@ _gdk_surface_destroy (GdkSurface *surface, void gdk_surface_destroy (GdkSurface *surface) { - _gdk_surface_destroy_hierarchy (surface, FALSE, FALSE, FALSE); + _gdk_surface_destroy_hierarchy (surface, FALSE); g_object_unref (surface); } diff --git a/gdk/gdksurfaceimpl.h b/gdk/gdksurfaceimpl.h index c5bd90ae7c..4bae67e914 100644 --- a/gdk/gdksurfaceimpl.h +++ b/gdk/gdksurfaceimpl.h @@ -100,18 +100,12 @@ struct _GdkSurfaceImplClass /* Called to do the windowing system specific part of gdk_surface_destroy(), * * surface: The window being destroyed - * recursing: If TRUE, then this is being called because a parent - * was destroyed. This generally means that the call to the windowing - * system to destroy the surface can be omitted, since it will be - * destroyed as a result of the parent being destroyed. - * Unless @foreign_destroy * foreign_destroy: If TRUE, the surface or a parent was destroyed by some * external agency. The surface has already been destroyed and no * windowing system calls should be made. (This may never happen * for some windowing systems.) */ void (* destroy) (GdkSurface *surface, - gboolean recursing, gboolean foreign_destroy); diff --git a/gdk/wayland/gdksurface-wayland.c b/gdk/wayland/gdksurface-wayland.c index a1088a74df..6b22635fd3 100644 --- a/gdk/wayland/gdksurface-wayland.c +++ b/gdk/wayland/gdksurface-wayland.c @@ -2847,7 +2847,6 @@ gdk_surface_wayland_input_shape_combine_region (GdkSurface *surface, static void gdk_wayland_surface_destroy (GdkSurface *surface, - gboolean recursing, gboolean foreign_destroy) { GdkWaylandDisplay *display; diff --git a/gdk/x11/gdksurface-x11.c b/gdk/x11/gdksurface-x11.c index 0da023a09d..a2b0f421e8 100644 --- a/gdk/x11/gdksurface-x11.c +++ b/gdk/x11/gdksurface-x11.c @@ -992,8 +992,7 @@ gdk_toplevel_x11_free_contents (GdkDisplay *display, static void gdk_x11_surface_destroy (GdkSurface *surface, - gboolean recursing, - gboolean foreign_destroy) + gboolean foreign_destroy) { GdkSurfaceImplX11 *impl = GDK_SURFACE_IMPL_X11 (surface->impl); GdkToplevelX11 *toplevel; @@ -1013,7 +1012,7 @@ gdk_x11_surface_destroy (GdkSurface *surface, impl->cairo_surface = NULL; } - if (!recursing && !foreign_destroy) + if (!foreign_destroy) XDestroyWindow (GDK_SURFACE_XDISPLAY (surface), GDK_SURFACE_XID (surface)); } -- 2.30.2